package com.ljx.offer;

/**
 * @author 李捷禧
 * Date: 2023/3/21
 * ClassName: C_55_2
 */

public class C_55_2 {

    /**
     * 使用的是一个后序遍历
     * 当root是一个平衡树的时候，返回的是树的高度；
     * 当返回的是-1时，就是一个不平衡的二叉树
     * 顺序就是左右根
     * @param root
     * @return
     */
    public boolean isBalanced(TreeNode root) {
        return recur(root) != -1;
    }

    private int recur(TreeNode root) {
        if(root == null) return 0;
        int left = recur(root.left);
        if(left == -1) return -1;
        int right = recur(root.right);
        if(right == -1) return -1;
        return Math.abs(left - right) < 2 ? Math.max(left,right) + 1 : -1;
    }

    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) { val = x; }
    }
}
